#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
int read(){
	char c=getchar();int x=0;
	while(c<48||c>57) c=getchar();
	do x=x*10+(c^48),c=getchar();
	while(c>=48&&c<=57);
	return x;
}
int n,m,q;
namespace BF{
	const int N=13;
	int que[N],tl;
	bool f[N][N];
	int deg[N];
	vector<int> vec[N];
	int g[1<<N][5];
	int w[N],vis[N],rk;
	int F[N],G[N];
	void solve(){
		for(int i=1;i<=m;++i){
			int u=read(),v=read();
			f[u][v]=1;
			vec[v].emplace_back(u),++deg[u];
		}
		for(int i=1;i<=n;++i) f[i][i]=1;
		for(int k=1;k<=n;++k)
			for(int i=1;i<=n;++i)
				for(int j=1;j<=n;++j) f[i][j]|=f[i][k]&&f[k][j];
		for(int i=1;i<=n;++i) if(!deg[i]) que[++tl]=i;
		for(int i=1;i<=tl;++i){
			int u=que[i];
			for(int v:vec[u]) if(!--deg[v]) que[++tl]=v;
		}
		for(int s=0;s<(1<<(n+1));s+=2)
			if(__builtin_popcount(s)<=4){
				rk=0;
				for(int i=1;i<=n;++i) if(s>>i&1) w[++rk]=i;
				for(int t=0;t<(1<<(n+1));t+=2){
					bool fl=1;
					for(int i=1;i<=n;++i)
						if(t>>i&1){
							int cnt=0;
							for(int j=1;j<=rk;++j) if(f[w[j]][i]) vis[j]=1,++cnt;
							if(cnt!=1){fl=0;break;}
						}
					for(int i=1;i<=rk;++i) if(vis[i]) vis[i]=0;else fl=0;
					for(int i=n;i;--i){
						int u=que[i];
						F[u]=0x3f3f3f3f;
						G[u]=-0x3f3f3f3f;
						if(u==1) F[u]=G[u]=0;
						for(int v:vec[u]){
							F[u]=min(F[u],F[v]);
							G[u]=max(G[u],G[v]);
						}
						F[u]+=(s>>u&1);
						G[u]+=(s>>u&1);
					}
					for(int i=1;i<=n;++i)
						if(t>>i&1){
							if(F[i]!=1||G[i]!=1){fl=0;break;}
						}
					if(fl) ++g[t][rk];
				}
			}
		while(q--){
			int k=read(),p=read(),cur=0;
			while(p--) cur|=1<<read();
			printf("%d\n",g[cur][k]);
		}
	}
}
const int N=200003;
int que[N],tl;
int deg[N];
vector<int> vec[N];
int f[N][20],de[N];
int lca(int u,int v){
	if(de[u]<de[v]) swap(u,v);
	for(int i=19;~i;--i) if(de[f[u][i]]>de[v]) u=f[u][i];
	if(de[u]>de[v]) u=f[u][0];
	for(int i=19;~i;--i) if(f[u][i]!=f[v][i]) u=f[u][i],v=f[v][i];
	if(u!=v) return f[u][0];
	return u;
}
void link(int u,int w){
	f[u][0]=w;
	de[u]=de[w]+1;
	for(int i=1;i<20;++i) f[u][i]=f[f[u][i-1]][i-1];
}
int main(){
	freopen("lodge.in","r",stdin);
	freopen("lodge.out","w",stdout);
	n=read();m=read();q=read();
	if(n<=10){BF::solve();return 0;}
	for(int i=1;i<=m;++i){
		int u=read(),v=read();
		vec[v].emplace_back(u),++deg[u];
	}
	for(int i=1;i<=n;++i) if(!deg[i]) que[++tl]=i;
	for(int i=1;i<=tl;++i){
		int u=que[i];
		for(int v:vec[u]) if(!--deg[v]) que[++tl]=v;
	}
	for(int i=n-1;i;--i){
		int u=que[i];
		int t=0;
		for(int v:vec[u]){
			if(t) t=lca(t,v);
			else t=v;
		}
		link(u,t);
	}
	while(q--){
		int k=read(),p=read();
		if(k!=1){while(p--) read();puts("NO!");continue;}
		int t=0;
		while(p--){
			int v=read();
			if(t) t=lca(t,v);
			else t=v;
		}
		printf("%d\n",de[t]+1);
	}
	return 0;
}
